刷題是練習解決問題的能力的一種方法,而這裡的「問題」主要是指演算法問題。但在實務的工作場景當中,「演算法問題」只是程式工作的一小部分而已。我們除了在意「一個問題中的算法怎麼解之外」,我們更在意的「如何把這些算法實現成完整的應用」。因此除了刷題之外的事是如何用「工程化」的方式解決一個真實問題,除了刷題之外想寫好程式還有以下幾個技能需要掌握:
昨天討論到的「軟體工程」在意的是如何從寫出「好的程式碼品質」近一步寫出「好的程式專案」,一個可以運行得當的產品絕對不只是一個跑得動的程式而已。下一個想要討論的題目是「專案管理(Project Management)」,如何在正確轉換使用者需求,進而規劃專案進程專案管理在意的點。
專案管理是從「專案完成」為大前提的目標下,規劃出一系列達到目的的時程安排與交付項目。根據 維基百科 的定義:「領導一個團隊在規定時間內實現目標和達到成功標準的過程, 其主要挑戰在於在給定的約束條件下實現所有專案目標,在社會科學領域是管理學的一個分支學科。這些信息通常包含於在開發過程初期建立的專案文檔中。主要的約束條件是範圍、時間、預算其次是優化資源配置的必要投入,並將其應用於實現既定目標。」
專案管理是一門管理的技術,專案管理者(Project Manager)也是程式專案中不可或缺的角色。程式碼的品質沒有極限,但時間有限。
人月神話 是一本關於「專案管理」的必修教科書
這本書當中會用人月(man-month)來量化軟體開發的資源,人月指的是「一個人要花幾個月」可以完成工作的單位,被用來評估量化該專案的大小與負擔,從人力和工時兩個維度下去思考。不過人力成本和時間成本並不完全呈現線性的關係,也就是兩者並不是被 1:1 的取代。換句話說,同樣的專案開發,增加一倍的人力並不代表開發時程可以減少一半。而盲目地增加人力或壓力時程,反而有可能造成反效果,這也是許多專案管理上會遇到的誤區。
在一本書當中用了許多案例與理論說明常見的專案管理盲點與策略,是一本重要的經典。
一個軟體從無到有開發過程我們稱為「生命週期」,大致上會包含「分析」、「設計」、「實作」與「測試」,有些人也會加上「部署」跟「維護」。常見的開發方法可以分為「瀑布模型(Waterfall Model)」或「敏捷開發(Agile Development)」,如 下圖 所示:
軟體專案管理是在開發的過程中加入「需求」、「時間」與「人力」三個維度,讓整個過程能夠:
如何在正確的時間要求下,將投入資源效益最大化。
嗨,大家好!我是維元,一名擅長網站開發與資料科學的雙棲工程師,斜槓於程式社群【JSDC】核心成員及【資料科學家的工作日常】粉專經營。目前在 ALPHACamp 擔任資料工程師,同時也在中華電信、工研院與多所學校等單位持續開課。擁有多次大型技術會議講者與競賽獲獎經驗,持續在不同的平台發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的分享,邀請你加入 訂閱 接收最新資訊。